#ifndef BASE_DECODER_H
#define BASE_DECODER_H

#include "Data/SafeQueue.hpp"
#include <memory>
#include "Data/FileContextWrapper.h"

extern "C" {
#include <libavcodec/avcodec.h>
#include <libavutil/frame.h>
#include <libavutil/samplefmt.h>
#include <libswresample/swresample.h>
#include <libavutil/avutil.h>

#include <libavutil/channel_layout.h>
}
class BaseDecoder {
public:
    using AVCodecContextDeleter = AVFormatContextWrapper::AVCodecContextDeleter;
    using AVCodecContextPtr = std::unique_ptr<AVCodecContext, AVCodecContextDeleter>;
    BaseDecoder(){

    }

    virtual ~BaseDecoder(){

    }

    // 初始化解码器。
    virtual bool init(const AVCodecContextPtr &  codec) = 0;
    // 解码函数，子类需要实现具体的解码逻辑。
    virtual bool decode(AVPacket* packet) = 0;

    // 释放解码器资源。
    virtual void release() = 0;


protected:
    SafeQueue<AVPacket> m_packet_queue; // 存储 AVPacket 的安全队列。
    // 其他共享成员变量。
};

#endif // BASE_DECODER_H
